home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / SCREEN.SWG / 0041_Grabbing Screen Output.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-02  |  1KB  |  55 lines

  1. {
  2. KELLY SMALL
  3.  
  4. Ok here's a quick example of how you can control the screen
  5. output during an Exec.  BAsically you hook Int $29 which is an
  6. internal bios hook For screen output.  Any Character that would
  7. go to the screen is intercepted by the Interrupt handler and then
  8. TP's Write Procedure is used to output the Charcater to the
  9. screen.  Please note that this will only work With the Crt Unit
  10. and it's direct screen Write methods, not output via the Dos
  11. device..  Of course I assume you are using the Crt Unit since you
  12. are also using the Window Procedure.  if the Program you exec
  13. Uses direct screen Writes then this routine will not work.
  14. }
  15.  
  16. Program WinHold;
  17. {$M 8096,0,0}
  18. Uses
  19.   Crt, Dos;
  20.  
  21. Var
  22.   OldIntVect : Pointer;
  23.  
  24. {F+}
  25. Procedure Int29Handler(AX, BX, CX, DX, SI, DI, DS, ES, BP : Word); Interrupt;
  26. Var
  27.   Dummy : Byte;
  28. begin
  29.   Asm
  30.     Sti
  31.   end;
  32.   Write(Char(Lo(Ax)));
  33.   Asm
  34.     Cli
  35.   end;
  36. end;
  37. {$F-}
  38.  
  39. begin
  40.   ClrScr;
  41.   Writeln('this line better stay put');
  42.   Window(10, 15, 60, 25);
  43.   GetIntVec($29, OldIntVect);            { Save the old vector }
  44.   SetIntVec($29, @Int29Handler);         { Install interrupt handler }
  45.   SwapVectors;
  46.   Exec(GetEnv('COMSPEC'),'/c dir /p');
  47.   SwapVectors;
  48.   SetIntVec($29, OldIntVect);            { Restore the interrupt }
  49.   Window(1, 1, 80, 25);
  50.   GotoXY(1, 2);
  51.   Writeln('2nd line I hope');
  52.   ReadLn;
  53. end.
  54.  
  55.